package com.t2tierp.pafecf.controller;

import br.com.modelo.Movimento;
import br.com.modelo.Sangria;
import br.com.modelo.Suprimento;
import br.com.util.JPAUtil;
import java.math.BigDecimal;
import javax.persistence.EntityManager;
import javax.persistence.Query;

public class MovimentoController {


    public Movimento verificaMovimento() {
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        Query q = em.createNamedQuery("FROM Movimento m, "
                + "Turno t, "
                + "Caixa c, "
                + "Operador o, "
                + "Impressora i "
                + "WHERE m.idEcfTurno.id = t.id AND "
                + "m.idEcfImpressora.id = i.id AND "
                + "m.idEcfOperador.id = o.id AND "
                + "m.idEcfCaixa.id = c.id AND "
                + "m.statusMovimento = 'A' or m.statusMovimento='T'");
        Movimento retorno;
        try {
            retorno = (Movimento) q.getSingleResult();
            em.close();
            return retorno;
        } catch (javax.persistence.NoResultException e) {
            em.close();
            return null;
        }

    }

    public void encerraMovimento(Movimento movimento) {
        JPAUtil.mergeObjeto(movimento);
    }

    public boolean insere(Movimento movimento) {
        return true;
    }

    public Movimento iniciaMovimento(Movimento movimento) {
        return (Movimento) JPAUtil.mergeObjeto(movimento);
    }

    public void saidaTemporaria(Movimento movimento) {
        movimento.setStatusMovimento('T');
        JPAUtil.mergeObjeto(movimento);
    }

    public void retornoOperador(Movimento movimento) {
        movimento.setStatusMovimento('A');
        JPAUtil.mergeObjeto(movimento);
    }

    public boolean suprimento(Suprimento suprimento) {
        try {
            JPAUtil.mergeObjeto(suprimento);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public boolean sangria(Sangria sangria) {
        try {
            JPAUtil.mergeObjeto(sangria);
            return true;
        } catch (Exception e) {
            return false;
        }
    }

    public String[] totalizaValores(Movimento mov) {
        String[] retorno = new String[10];
        BigDecimal totSangria = new BigDecimal(0);
        BigDecimal totSuprimento = new BigDecimal(0);
        BigDecimal totVendas = new BigDecimal(0);
        BigDecimal totAbertura = new BigDecimal(0);

        /*
         * ************************************************************
         * ******************Totais de sangria*************************
         * *************************************************************
         */
        EntityManager em = JPAUtil.retornarFabrica().createEntityManager();
        
        totSangria = (BigDecimal) em.createNamedQuery("select IFNULL(SUM(s.valor),0) AS TOTAL from Sangria s where s.idEcfMovimento.id = " + mov.getId()).getSingleResult();

        /*
         * ************************************************************
         * ******************Totais de Suprimento*************************
         * *************************************************************
         */
        totVendas = (BigDecimal) em.createNamedQuery("select IFNULL(SUM(v.valorVenda),0) AS TOTAL from VendaCabecalho v where v.idEcfMovimento.id = " + mov.getId() + " and v.cupomCancelado = 'N'").getSingleResult();
        /*
         * *************************************************************
         * ******************Totais de vendas **************************
         * *************************************************************
         */
        totSuprimento = (BigDecimal) em.createNamedQuery("select IFNULL(SUM(s.valor),0) AS TOTAL from Suprimento s where s.idEcfMovimento.id = " + mov.getId()).getSingleResult();
        /*
         * *************************************************************
         * *******************Total de abertura de caixa****************
         * *************************************************************
         */
        totAbertura = (BigDecimal) em.createNamedQuery("select IFNULL(SUM(m.totalVenda),0) as TOTAL from Movimento m where m.id = " + mov.getId()).getSingleResult();
        retorno[0] = totSangria.toString();
        retorno[1] = totSuprimento.toString();
        mov.getTotalSuprimento();
        retorno[2] = totAbertura.toString();//abertura de caixa
        retorno[3] = totVendas.toString();
        return retorno;
    }
}
